package com.eunion.fileserver.upload;

import java.io.InputStream;
import java.util.List;

import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 文件上传抽象类.
 * @since 2017年2月17日
 */
public abstract class FileUploadAbstract {

	protected static Logger LOG = LoggerFactory.getLogger(FileUploadAbstract.class);

	/**
	 * 上传文件，返回相对根目录地址.
	 * @param fv 文件上传对象.
	 * @return 返回相对根目录地址.
	 */
	public void checkPath(FileVo fv) {
		// 生成文件路径,如果没有就生成默认的目录
		if (StringUtils.isEmpty(fv.getPath())) {
			fv.setPath(FileUploadHelper.DEFAULT_UPLOAD_DIR);
		}
		if (!fv.getPath().endsWith("/")) {
			fv.setPath(fv.getPath() + "/");
		}
		fv.setPath(fv.getPath() + FileUploadHelper.getSubTimeFolder());//加上时间目录
	}

	/**
	 * 上传文件，返回相对根目录地址.
	 * @param fv 文件上传对象.
	 * @param path 默认路径.
	 * @return 返回相对根目录地址.
	 */
	public void uploadFileInputStream(FileVo fv, String path) {
		if (StringUtils.isNotEmpty(path)) {
			fv.setPath(path);
		}
		uploadFileInputStream(fv);
	}

	/**
	 * 上传文件，返回相对根目录地址.
	 * @param fv 文件上传对象.
	 * @return 返回相对根目录地址.
	 */
	public abstract void uploadFileInputStream(FileVo fv);

	/**
	 * 删除文件.
	 * @param deleteFile 待删除文件.
	 * @return 文件删除的状态，true表示成功,false表示失败.
	 */
	public abstract boolean deleteFile(String deleteFile);

	/**
	 * 下载文件.
	 * @param source 待下载文件,相对根路径，不带前缀/
	 * @param destination localPathName 下载到本地的绝对地址及文件
	 * @return 返回下载状态.
	 */
	public abstract boolean downloadFile(String source, String destination);

	/**
	 * 下载文件.
	 * @param source 待下载文件,相对根路径，不带前缀/
	 * @return InputStream 输出流
	 */
	public abstract InputStream getFileInputStream(String source);

	/**
	 * @param directory 待查阅目录,相对根路径，不带前缀/
	 * @return 返回目录有的文件列表.null表示没有.
	 */
	public abstract List<String> listFiles(String directory);
}
